<?php
namespace app\official\controller;

use mikkle\tp_wechat\base\BaseWechatApi;
use mikkle\tp_wechat\Wechat;

class Index extends BaseWechatApi
{
	public function __construct()
	{
		parent::__construct();

		// 获取config表的网站域名的值 => config配置
		$this->cdn = config('cdn');

	}

    protected $valid = false;  //网站第一次匹配 true 1为匹配
    protected $isHook = false; //是否开启钩子

    public function auth()
    {
        // 调用父级的方法
        $this->index();

        // 
        $Subscribe = $this->returnEventSubscribe();

        $this->weObj->text($Subscribe)->reply();
    }

    // 默认关注回复信息
    protected function returnEventSubscribe()
    {
        $message = "欢迎来到K2215ask论坛\n使用帮助\n1、发送城市名称，可搜索天气\n2、发送预约单号，可搜索预约进度\n3、发送商品订单号，可搜索商品订单进度\n4、发送悬赏问题，可查看解决方案(提问：关键词)";

        return ['type' => 'text', 'message' => $message];
    }

    // 自定义菜单
    public function menu()
    {
        $button = [
            'button' => [
                [
                    'type' => 'view',
                    'name' => 'ASK论坛',
                    'url' => 'http://101.37.158.23:3030/'
                ],
                [
                    'type' => 'view',
                    'name' => '百度',
                    'url' => 'http://www.baidu.com'
                ],
                [
                    "name" => "发送位置", 
                    "type" => "location_select", 
                    "key" => "rselfmenu_2_0"
                ]
            ]
        ];

        $MenuJson = json_encode($button,JSON_UNESCAPED_UNICODE);

        $result = Wechat::menu()->createMenu($MenuJson);

        if($result === FALSE)
        {
            echo '更新自定义菜单失败';
        }else{
            echo '更新自定义菜单成功';
        }
    }
	
	protected function returnMessageText()
	{
		$keyword = $this->weObj->getRevContent();

		$helpList = [1,'h','help','帮助'];

		if(in_array($keyword,$helpList))
		{
			return "使用帮助\n1、发送城市名称，可搜索天气\n2、发送预约单号，可搜索预约进度\n3、发送商品订单号，可搜索商品订单进度\n4、发送悬赏问题，可查看解决方案(提问：关键词)";
		}
		
		// 提问：vue
		if(stripos($keyword,'提问') !== FALSE)
		{
			$keyword = preg_replace('/:|：/',':',$keyword);

			// 字符串转成数组
			$arr = explode(':',$keyword);

			$title = isset($arr[1]) ? $arr[1] : '';

			if(empty($title))
			{
				return '请输入需要提问关键字';
			}

			$where['title'] = ['like',"%$title%"];

			$PostList = model('Post.Post')->where($where)->limit(5)->select();

			// file_put_contents('./demo.txt',$PostList);

			// $this->we_dump($PostList);
			// 直接调用图文信息返回客户端
			return $this->returnMessageImage($PostList);
			
		}
		
		if(stripos($keyword,'天气') !== FALSE)
		{
			// $preg = "/(.*)天气/";

			// preg_match($preg,$keyword,$result);

			// $this->we_dump($result);

			// 广州天气 => 把天气两个字去掉 => 广州
			$city = preg_replace('/天气/','',$keyword);

			// 拼接Api地址
			$url = "https://api.asilu.com/weather/?city=$city";

			$json = file_get_contents($url);

			$data = json_decode($json,true);

			$list = isset($data['weather']) ? $data['weather'] : [];

			if(empty($list))
			{
				return '该城市暂无数据';
			}

			// 城市：
			// 未来4天天气情况：
			//     周四 11月14日：晴、南风3-4级、17 ~ 6℃
			//     周四 11月14日：晴、南风3-4级、17 ~ 6℃
			//     周四 11月14日：晴、南风3-4级、17 ~ 6℃
			//     周四 11月14日：晴、南风3-4级、17 ~ 6℃

			$output = "{$city}：\n一周天气情况：\n";

			foreach($list as $item)
			{
				// 日期
				$date = $item['date'];
				// 天气情况
				$weather = $item['weather'];
				// 风向风级
				$wind = $item['wind'];
				// 温度
				$temp = $item['temp'];

				$output .= "$date : $weather 、$wind 、$temp\n\n";
			}

			return $output;
		}
		
	}
	
	protected function returnMessageImage($data = [])
	{
		// 定义新的数组
		$newArray = [];

		// 如果数组不为空
		if(!empty($data))
		{
			// 拼接图片
			$pic = $this->cdn."/static/home/images/logo.png";

			// 循环
			foreach($data as $item)
			{
				$newArray[] = [
					// 标题
					'Title' => $item['title'],
					// 简介
					'Description' => $item['title'],
					// 图片
					'PicUrl' => $pic,
					// 'Url' => $this->request->domain(),
					// 带上域名 => 点击跳转地址
					'Url' => url('home/index/info', ['postid' => $item['id']], true, true),
				];
			}
		}

		// 开发者限制 每次推送只能发送一条图文信息
		$reply = ['type' => 'news', 'message' => $newArray];

		return $reply;
	}
	
	public function send()
	{
		if(request()->isPost())
		{
			$params = request()->param();

			$data = [
				'touser' => $params['touser'],
				'template_id' => 'kHLpZb_6w1_4LbkXLedVBN7CysPJis4SCmp6K3ztW-8',
				'url' => 'http://101.37.158.23:3030/',
				'data' => [
					'first' => [
						'value' => '您好，您的订单已配送',
						'color' => '#173177'
					],
					'code' => [
						'value' => $params['code'],
						'color' => '#173177'
					],
					'express' => [
						'value' => $params['express'],
						'color' => '#173177'
					],
					'expcode' => [
						'value' => $params['expcode'],
						'color' => '#173177'
					],
					'user' => [
						'value' => $params['user'],
						'color' => '#173177'
					],
					'tel' => [
						'value' => $params['tel'],
						'color' => '#173177'
					],
				]
			];

			$dataJson = json_encode($data,JSON_UNESCAPED_UNICODE);

			$result = Wechat::message()->sendTemplateMessage($dataJson);

			if($result === FALSE)
			{
				echo '发送失败';
				exit;
			}else{
				echo '发送成功';
				exit;
			}
		}
		return view();
	}

}
